iT邦幫忙

2021 iThome 鐵人賽

DAY 26
1
Software Development

糟了!是世界奇觀!系列 第 26

DAY26 把這個Google maps 放在 APP 上(二)

  • 分享至 

  • xImage
  •  

看到標題有個(二)該不會又是很長的系列文了吧!?

並不會。

因為有點複雜。微懶。


抓取目前所在位子

昨天做完那些步驟之後,Android Studio 裡面預先幫你標註了澳洲雪梨的位子,你可以在 MapsActivity.kt 裡面刪除這個 marker 或是先保留,等之後再來放上你要標註的地點。

在做這些之前,先來抓取實際上你所在的位子。Google maps 內建了目前位置的按鈕 (直接加在昨天開好的專案裡面就好了):

override fun onMapReady(googleMap: GoogleMap) {
    mMap = googleMap

    mMap.isMyLocationEnabled = true
}

正常來說新增了 isMyLocationEnabled 這行程式會被標記錯誤,你可以滑鼠可以直接移到錯誤的地方,點選 Add permission Check:

https://ithelp.ithome.com.tw/upload/images/20211011/201406388tFxuo338B.png

if (ActivityCompat.checkSelfPermission(
                this,
                Manifest.permission.ACCESS_FINE_LOCATION
            ) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
                this,
                Manifest.permission.ACCESS_COARSE_LOCATION
            ) != PackageManager.PERMISSION_GRANTED
        ) {
            // TODO: Consider calling
            //    ActivityCompat#requestPermissions
            // here to request the missing permissions, and then overriding
            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
            //                                          int[] grantResults)
            // to handle the case where the user grants the permission. See the documentation
            // for ActivityCompat#requestPermissions for more details.
            return
        }

在 TODO 的那行會要你要求寫程式去要求權限,照著他的說明就會是這樣:

override fun onMapReady(googleMap: GoogleMap) {
        mMap = googleMap

        if (ActivityCompat.checkSelfPermission(
                this,
                Manifest.permission.ACCESS_FINE_LOCATION
            ) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
                this,
                Manifest.permission.ACCESS_COARSE_LOCATION
            ) != PackageManager.PERMISSION_GRANTED
        ) {
            //要求有精確定位的權限,因精確定位裡包含了粗綠定位
            ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), 0)
            return
        }else
            mMap.isMyLocationEnabled = true
}

因為這個功能還要搭配一些權限,接下來在 AndroidManifest.xml 裡增添一些權限:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mapstest">

    <!--允許使用網路-->
    <uses-permission android:name="android.permission.INTERNET"/>
    <!--粗略權限-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <!--精確定位權限-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

其實裡面已經幫你加好了精確定位,在這邊補上允許粗略定位的權限。

以上都設定完成的話,在實機上的畫面會是這樣:

https://ithelp.ithome.com.tw/upload/images/20211011/20140638L6L4RHz6Sz.png

點擊右上角的圖示,就會移到目前的所在位置啦。


標記一個地點

在上面進行設定的時候,應該會發現 onMapReady 這個 fun 裡面有已經設定好的雪梨標記點,其實只要程式後面的資訊,就可以改標記另一個地方:

val marker = MarkerOptions() //宣告一個 marker 變數
marker.position(LatLng(24.078311918785868, 120.71365502668787)) //放入要標記的點
marker.title("旦式設計")  // marker 名稱
marker.draggable(false)  // marker 是否可以拖移
mMap.addMarker(marker)   //在地圖加上 marker 這個標記點

運行之後點選標記點,標記名稱就會顯示在上方:

https://ithelp.ithome.com.tw/upload/images/20211011/201406387bQFSkznh0.png

Google Maps 的簡單介紹就到這邊啦。

下一篇見寫寫打家打家擺掰。


上一篇
DAY25 把這個Google maps 放在 APP 上
下一篇
DAY27 把這個Google maps 放在 APP 上(三)
系列文
糟了!是世界奇觀!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言